import bean.ListNode;

/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec 中等
 * 给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。
 * 输入：head = [1,2,3,4,5], n = 2
 * 输出：[1,2,3,5]
 * @since 2023-08-27 20:01
 */
public class _018删除链表的倒数第N个结点 {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        int cur = 0;
        int len = getLen(head);
        if(n == len){
            return head.next;
        }
        ListNode p = head;
        //找倒数第n - 1个节点
        while(cur < len - n - 1){
            p = p.next;
            cur++;
        }
        if(n == 1){ //删除最后一个节点
            p.next = null;
        }else{
            p.next = p.next.next;
        }
        return head;
    }
    //获取链表长度
    static int getLen(ListNode head){
        int len = 0;
        while(head != null){
            len++;
            head = head.next;
        }
        return len;
    }
}
